home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmiSoft / Util / Arc / Checkx.lha / CheckX / sources / Include / SDI_compiler.h
C/C++ Source or Header  |  2002-12-30  |  4KB  |  169 lines

  1. #ifndef SDI_COMPILER_H
  2. #define SDI_COMPILER_H
  3.  
  4. /* Includeheader
  5.  
  6.         Name:           SDI_compiler.h
  7.         Versionstring:  $VER: SDI_compiler.h 1.10 (18.10.2002)
  8.         Author:         SDI
  9.         Distribution:   PD
  10.         Description:    defines to hide compiler stuff
  11.  
  12.  1.1   25.06.98 : created from data made by Gunter Nikl
  13.  1.2   17.11.99 : added VBCC
  14.  1.3   29.02.00 : fixed VBCC REG define
  15.  1.4   30.03.00 : fixed SAVEDS for VBCC
  16.  1.5   29.07.00 : added #undef statements (needed e.g. for AmiTCP together
  17.         with vbcc)
  18.  1.6   19.05.01 : added STACKEXT and Dice stuff
  19.  1.7   16.06.02 : added MorphOS specials and VARARGS68K
  20.  1.8   21.09.02 : added MorphOS register stuff
  21.  1.9   26.09.02 : added OFFSET macro. Thanks Frank Wille for suggestion
  22.  1.10  18.10.02 : reverted to old MorphOS-method for GCC
  23. */
  24.  
  25. /*
  26. ** This is PD (Public Domain). This means you can do with it whatever you want
  27. ** without any restrictions. I only ask you to tell me improvements, so I may
  28. ** fix the main line of this files as well.
  29. **
  30. ** To keep confusion level low: When changing this file, please note it in
  31. ** above history list and indicate that the change was not made by myself
  32. ** (e.g. add your name or nick name).
  33. **
  34. ** Dirk Stöcker <stoecker@epost.de>
  35. */
  36.  
  37. #ifdef ASM
  38. #undef ASM
  39. #endif
  40. #ifdef REG
  41. #undef REG
  42. #endif
  43. #ifdef LREG
  44. #undef LREG
  45. #endif
  46. #ifdef CONST
  47. #undef CONST
  48. #endif
  49. #ifdef SAVEDS
  50. #undef SAVEDS
  51. #endif
  52. #ifdef INLINE
  53. #undef INLINE
  54. #endif
  55. #ifdef REGARGS
  56. #undef REGARGS
  57. #endif
  58. #ifdef STDARGS
  59. #undef STDARGS
  60. #endif
  61. #ifdef OFFSET
  62. #undef OFFSET
  63. #endif
  64.  
  65. /* first "exceptions" */
  66.  
  67. #if defined(__MAXON__)
  68.   #define STDARGS
  69.   #define STACKEXT
  70.   #define REGARGS
  71.   #define SAVEDS
  72.   #define INLINE inline
  73. #elif defined(__VBCC__)
  74.   #define STDARGS
  75.   #define STACKEXT
  76.   #define REGARGS
  77.   #define INLINE
  78.   #define OFFSET(p,m) __offsetof(struct p,m)
  79.   #if defined(__MORPHOS__)
  80.     #define REG(reg,arg) __reg(MOS__##reg) arg
  81.  
  82.     /* NOTE: This assumes "quick native mode" when compiling libraries. */
  83.     #define MOS__a0 "r24"
  84.     #define MOS__a1 "r25"
  85.     #define MOS__a2 "r26"
  86.     #define MOS__a3 "r27"
  87.     #define MOS__a4 "r28"
  88.     #define MOS__a5 "r29"
  89.     #define MOS__a6 "r30"
  90.     /* #define MOS__a7 "r31" */
  91.     #define MOS__d0 "r16"
  92.     #define MOS__d1 "r17"
  93.     #define MOS__d2 "r18"
  94.     #define MOS__d3 "r19"
  95.     #define MOS__d4 "r20"
  96.     #define MOS__d5 "r21"
  97.     #define MOS__d6 "r22"
  98.     #define MOS__d7 "r23"
  99.  
  100.   #else
  101.     #define REG(reg,arg) __reg(#reg) arg
  102.   #endif
  103. #elif defined(__STORM__)
  104.   #define STDARGS
  105.   #define STACKEXT
  106.   #define REGARGS
  107.   #define INLINE inline
  108. #elif defined(__SASC)
  109.   #define ASM(arg) arg __asm
  110. #elif defined(__GNUC__)
  111.   #define REG(reg,arg) arg __asm(#reg)
  112.   #define LREG(reg,arg) register REG(reg,arg)
  113.  
  114.   /* Don`t use __stackext for the MorphOS version
  115.      because we anyway don`t have a libnix ppc with stackext
  116.      Also we define a VARARGS68K define here to specify
  117.      functions that should work with that special attribute
  118.      of the MOS gcc compiler for varargs68k handling. */
  119.   #if defined(__MORPHOS__)
  120.     #define STDARGS
  121.     #define STACKEXT
  122.     #define VARARGS68K  __attribute__((varargs68k))
  123.   #endif
  124. #elif defined(_DCC)
  125.   #define REG(reg,arg) __##reg arg
  126.   #define STACKEXT __stkcheck
  127.   #define STDARGS __stkargs
  128.   #define INLINE static
  129. #endif
  130.  
  131. /* then "common" ones */
  132.  
  133. #if !defined(ASM)
  134.   #define ASM(arg) arg
  135. #endif
  136. #if !defined(REG)
  137.   #define REG(reg,arg) register __##reg arg
  138. #endif
  139. #if !defined(LREG)
  140.   #define LREG(reg,arg) register arg
  141. #endif
  142. #if !defined(CONST)
  143.   #define CONST const
  144. #endif
  145. #if !defined(SAVEDS)
  146.   #define SAVEDS __saveds
  147. #endif
  148. #if !defined(INLINE)
  149.   #define INLINE static __inline
  150. #endif
  151. #if !defined(REGARGS)
  152.   #define REGARGS __regargs
  153. #endif
  154. #if !defined(STDARGS)
  155.   #define STDARGS __stdargs
  156. #endif
  157. #if !defined(STACKEXT)
  158.   #define STACKEXT __stackext
  159. #endif
  160. #if !defined(VARARGS68K)
  161.   #define VARARGS68K
  162. #endif
  163. #if !defined(OFFSET)
  164.   #define OFFSET(structName, structEntry) \
  165.     ((char *)(&(((struct structName *)0)->structEntry))-(char *)0)
  166. #endif
  167.  
  168. #endif /* SDI_COMPILER_H */
  169.